package com.example.test.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.test.example.msg.TableResultResponse;
import com.example.test.example.select.SelectBaseExample;
import com.example.test.example.update.UpdateBaseExample;
import com.example.test.example.util.BaseExampleUtil;
import com.example.test.mapper.BaseExampleMapper;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;

@Service
public class BaseExampleBiz {


	@Autowired
	public BaseExampleMapper baseExampleMapper;

	/**
	 * 搜索通用方法 (不包含分页)
	 * @param baseExample SelectBaseExample对象 
	 * @param clz Class类对象
	 * @return
	 */
	public List<Map<String,Object>> getObjectByField(SelectBaseExample baseExample, Class<?> ... clz) {
		List<Map<String, Object>> resultList = baseExampleMapper.getObjectByField(baseExample);
		if(resultList.size() > 0) {
			BaseExampleUtil.list2Property(resultList,baseExample,clz);
		}
		return resultList;
	}


	/**
	 * 搜索通用方法(包装了分页的结果，直接返回TableResultResponse)
	 * @param page 当前页号
	 * @param limit 当前页显示条数
	 * @param baseExample 查询条件
	 * @param clz 要查询的类
	 * @return 返回response响应类
	 */
	public TableResultResponse<Map<String,Object>> getObjectByFieldOnPage(int page, int limit, SelectBaseExample baseExample, Class<?> ... clz) {
		Page<Object> result = PageHelper.startPage(page, limit);
		List<Map<String, Object>> resultList = baseExampleMapper.getObjectByField(baseExample);
		if(resultList.size() > 0) {
			BaseExampleUtil.list2Property(resultList,baseExample,clz);
		}
		return new TableResultResponse<Map<String,Object>>(result.getTotal(),resultList);
	}


	/**
	 * 搜索通用方法返回分页结果
	 * @param page 当前页号
	 * @param limit 当前页显示条数
	 * @param baseExample 查询条件
	 * @param clz 要查询的类
	 * @return 返回map，map中包含两对映射，total: 查询得到的总记录数
	 * 									    data：查询的结果
	 */
	public Map<String,Object> getObjectByField(int page, int limit, SelectBaseExample baseExample, Class<?> ... clz){
		Page<Object> result = PageHelper.startPage(page, limit);
		result.clear();
		List<Map<String, Object>> resultList = baseExampleMapper.getObjectByField(baseExample);
		if(resultList.size() > 0) {
			BaseExampleUtil.list2Property(resultList,baseExample,clz);
		}
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("total",result.getTotal());
		map.put("data",resultList);
		return map;
	}

	/**
	 * 更新通用方法
	 * @param updateBaseExample
	 * @return
	 */
	public int updateObject(UpdateBaseExample updateBaseExample) {
		return baseExampleMapper.updateObject(updateBaseExample);
	}

}
